package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.dom.DomDateTime;
import br.com.telescope.adsrt.dom.DomId;
import br.com.telescope.adsrt.dom.DomInteger;
import br.com.telescope.adsrt.dom.DomText;
import br.com.telescope.adsrt.dom.DomUpper;
import br.com.telescope.adsrt.lib.AdsException;
import br.com.telescope.adsrt.lib.Field;
import br.com.telescope.adsrt.lib.Form;
import br.com.telescope.sql.ModelQuery;
import br.com.telescope.t2.EntityBinding;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.feature.DeleteFeature;
import br.com.telescope.t2.feature.InsertFeature;
import br.com.telescope.t2.feature.ListFeature;
import br.com.telescope.t2.feature.LookupFeature;
import br.com.telescope.t2.feature.UpdateFeature;
import br.com.telescope.t2.feature.ViewFeature;
import br.com.telescope.util.ObjectUtil;
import java.util.ArrayList;
import java.util.List;
import solutions.ferpa.ztest.ent.*;

/**
 * Valores da variávéis dos ensaios.
 * <p>
 * Interface para manutenção de Valor da variável para o ensaio
 * <P>
 * Telescope origin: ZTEST.CAD_VALOR_VARIAVEL_ENSAIO
 * <P>
 * Base entity: ZTEST.VALOR_VARIAVEL_ENSAIO
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class CadValorVariavelEnsaio extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "ZTEST.CAD_VALOR_VARIAVEL_ENSAIO";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Valores da variávéis dos ensaios");
    }
    
    protected EntValorVariavelEnsaio base;
    protected EntVariavelAplicativo vapl;
    protected EntValorVariavelEnsaio rec; // NEED_TJW1_COMPATIBILITY
    
    // Service parameters
    private DomId pIdEnsaioBancada;
    
    // Record items
    private DomId aId;
    private DomId aVariavelAplicativoId;
    private DomDateTime aDataHoraRegistro;
    private DomId aEnsaioBancadaId;
    private DomId aHidrometroEnsaioId;
    private DomInteger aNumeroIteracao;
    private DomText aValorLido;
    private DomId aPontoPlanoExecucaoId;
    private DomId aProcessoAplicativoId;
    private DomDateTime aDataHoraAjuste;
    private DomId aResponsavelAjusteId;
    private DomText aValorAjustado;
    private DomUpper aVaplNome;
    private DomId aVaplAplicativoOperacaoId;
    
    // Query items
    
    @Override
    public String getBaseSql() {
        return "select BASE.*"
                + " , VAPL.NOME as VAPL_NOME"
                + " , VAPL.APLICATIVO_OPERACAO_ID as VAPL_APLICATIVO_OPERACAO_ID"
                + " , VAPL.ID as Z_VAPL_ID"
                + " from VALOR_VARIAVEL_ENSAIO BASE"
                + " join VARIAVEL_APLICATIVO VAPL on VAPL.ID = BASE.VARIAVEL_APLICATIVO_ID";
    }
    
    @Override
    public void initAttributes() {
        
        aId = new DomId();
        aId.context(ctx).name("ID").label("Id");
        
        aVariavelAplicativoId = new DomId();
        aVariavelAplicativoId.context(ctx).name("VARIAVEL_APLICATIVO_ID").label("Variável do aplicativo");
        
        aDataHoraRegistro = new DomDateTime();
        aDataHoraRegistro.context(ctx).name("DATA_HORA_REGISTRO").label("Data e hora do registro");
        aDataHoraRegistro.setDefaultValue("[SYSDATE]");
        
        aEnsaioBancadaId = new DomId();
        aEnsaioBancadaId.context(ctx).name("ENSAIO_BANCADA_ID").label("Ensaio da bancada");
        
        aHidrometroEnsaioId = new DomId();
        aHidrometroEnsaioId.context(ctx).name("HIDROMETRO_ENSAIO_ID").label("Hidrômetro do ensaio");
        
        aNumeroIteracao = new DomInteger();
        aNumeroIteracao.context(ctx).name("NUMERO_ITERACAO").label("Número da iteração");
        aNumeroIteracao.setDefaultValue("1");
        
        aValorLido = new DomText();
        aValorLido.context(ctx).name("VALOR_LIDO").label("Valor lido (ensaio)");
        
        aPontoPlanoExecucaoId = new DomId();
        aPontoPlanoExecucaoId.context(ctx).name("PONTO_PLANO_EXECUCAO_ID").label("Ponto do plano de execução");
        
        aProcessoAplicativoId = new DomId();
        aProcessoAplicativoId.context(ctx).name("PROCESSO_APLICATIVO_ID").label("Processo do aplicativo");
        
        aDataHoraAjuste = new DomDateTime();
        aDataHoraAjuste.context(ctx).name("DATA_HORA_AJUSTE").label("Data e hora do ajuste");
        
        aResponsavelAjusteId = new DomId();
        aResponsavelAjusteId.context(ctx).name("RESPONSAVEL_AJUSTE_ID").label("Responsável pelo ajuste");
        
        aValorAjustado = new DomText();
        aValorAjustado.context(ctx).name("VALOR_AJUSTADO").label("Valor ajustado");
        
        aVaplNome = new DomUpper();
        aVaplNome.context(ctx).name("VAPL_NOME").label("Nome da variável");
        aVaplNome.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT NOME as valor"
                + " , NOME as pesquisar"
                + " , NOME as descricao"
                + " from VARIAVEL_APLICATIVO VAPL)", "q"));
        aVaplNome.setAutocompleteLength(2);
        
        aVaplAplicativoOperacaoId = new DomId();
        aVaplAplicativoOperacaoId.context(ctx).name("VAPL_APLICATIVO_OPERACAO_ID").label("Aplicativo de operação");
        aVaplAplicativoOperacaoId.setListOfValuesQuery(createQuery()
                .select("*")
                .from("(SELECT APLICATIVO_OPERACAO_ID as valor"
                + " , APLICATIVO_OPERACAO_ID as pesquisar"
                + " , APLICATIVO_OPERACAO_ID as descricao"
                + " from VARIAVEL_APLICATIVO VAPL)", "q"));
        aVaplAplicativoOperacaoId.setAutocompleteLength(2);
        
    }
    
    @Override
    public void initParameters() {
        pIdEnsaioBancada = new DomId(ctx, "ID_ENSAIO_BANCADA", "Ensaio de bancado");
        pIdEnsaioBancada.setValue(ctx.getParameter("P_ID_ENSAIO_BANCADA"));
        pIdEnsaioBancada.setSqlExpression("ENSAIO_BANCADA_ID");
        if (pIdEnsaioBancada.isNotNull()) {
            aEnsaioBancadaId.setValue(pIdEnsaioBancada.getValue());
        }
    }
    
    @Override
    public List<Field> getParameters() {
        if (allParameters == null) {
            allParameters = new ArrayList<Field>();
            allParameters.add(pIdEnsaioBancada);
        }
        return allParameters;
    }
    
    @Override
    public void copyBindParameters() {
        EntValorVariavelEnsaio record = getRecord();
        if (pIdEnsaioBancada.isNotNull()) {
            record.setEnsaioBancadaId(pIdEnsaioBancada.getValue());
        }
    }
    
    @Override
    public void retrieveBindParameters() {
        pIdEnsaioBancada.setValue(getRecord().valueOfEnsaioBancadaId());
    }
    
    @Override
    public void initEntityBindings() {
        EntityBinding binding;
        
        binding = new EntityBinding("ZTEST.VARIAVEL_APLICATIVO", "VAPL", "Z_VAPL_ID", "ZTEST.CAD_VARIAVEL_APLICATIVO.VIEW");
        binding.addFields(aVaplNome, aVaplAplicativoOperacaoId);
        entityBindings.add(binding);
    }
    
    @Override
    public String getQueryPkColumn() {
        return "BASE.ID";
    }
    
    @Override
    public void setId(String value) {
        this.aId.setValue(value);
    }
    
    @Override
    public EntValorVariavelEnsaio getRecord() {
        if (base == null) {
            base = new EntValorVariavelEnsaio(ctx);
            rec = base;
        }
        return this.base;
    }
    
    @Override
    public String getContextName() {
        return aVaplNome.toText();
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "VAPL_NOME";
    }
    
    @Override
    public void translateInsertFks(Form form) {
        ModelQuery query;
        
        // VARIAVEL_APLICATIVO_ID
        try {
            if (form.hasFields("VAPL_NOME")) {
                query = createQuery()
                        .select("VAPL.ID")
                        .from("VARIAVEL_APLICATIVO", "VAPL")
                        .filter("VAPL.NOME", form.get("VAPL_NOME"))
                        ;
                base.setVariavelAplicativoId(ObjectUtil.toLong(translateFk(query)));
            }
        } catch (AdsException ex) {
            throw new RuntimeException(ex);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="LIST">
    public class FList extends ListFeature {
        
        @Override
        public void initForm() {
            addField(aVaplNome, "view");
        }
        
        @Override
        public void onAction() {
            
        }
        
        {
            setFeatureName("LIST");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VIEW">
    public class FView extends ViewFeature {
        
        @Override
        public void initForm() {
            addField(aVaplNome, "view");
        }
        
        @Override
        public void onAction() {
            
        }
        
        {
            setFeatureName("VIEW");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="INSERT">
    public class FInsert extends InsertFeature {
        
        @Override
        public void initForm() {
            aVaplNome.setOptional(false);
            addField(aVaplNome, "rqd");
        }
        
        {
            setFeatureName("INSERT");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="UPDATE">
    public class FUpdate extends UpdateFeature {
        
        @Override
        public void initForm() {
            aVaplNome.setEditable(false);
            addField(aVaplNome, "view");
        }
        
        {
            setFeatureName("UPDATE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="DELETE">
    public class FDelete extends DeleteFeature {
        
        @Override
        public void initForm() {
            addField(aVaplNome, "view");
        }
        
        {
            setFeatureName("DELETE");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="VAPL_NOME_LOOKUP">
    public class FVaplNomeLookup extends LookupFeature {
        
        @Override
        public void initForm() {
            aVaplNome.setEditable(true);
            addField(aVaplNome, "opt");
            aVaplAplicativoOperacaoId.setEditable(false);
            addField(aVaplAplicativoOperacaoId, "view");
        }
        
        @Override
        public ModelQuery getLookupQuery() {
            return createQuery()
                    .select("VAPL.NOME as VAPL_NOME")
                    .select("VAPL.APLICATIVO_OPERACAO_ID as VAPL_APLICATIVO_OPERACAO_ID")
                    .from("VARIAVEL_APLICATIVO", "VAPL")
                    ;
        }
        
        {
            setFeatureName("VAPL_NOME_LOOKUP");
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FList());
        addFeature(new FView());
        addFeature(new FInsert());
        addFeature(new FUpdate());
        addFeature(new FDelete());
        addFeature(new FVaplNomeLookup());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "LIST";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    
    @Override
    public Long getId() {
        return aId.getValue();
    }
    
    public void setId(Long value) {
        this.aId.setValue(value);
    }
    
    public Long getVariavelAplicativoId() {
        return aVariavelAplicativoId.getValue();
    }
    
    public void setVariavelAplicativoId(Long value) {
        this.aVariavelAplicativoId.setValue(value);
    }
    
    public java.sql.Timestamp getDataHoraRegistro() {
        return aDataHoraRegistro.getValue();
    }
    
    public void setDataHoraRegistro(java.sql.Timestamp value) {
        this.aDataHoraRegistro.setValue(value);
    }
    
    public Long getEnsaioBancadaId() {
        return aEnsaioBancadaId.getValue();
    }
    
    public void setEnsaioBancadaId(Long value) {
        this.aEnsaioBancadaId.setValue(value);
    }
    
    public Long getHidrometroEnsaioId() {
        return aHidrometroEnsaioId.getValue();
    }
    
    public void setHidrometroEnsaioId(Long value) {
        this.aHidrometroEnsaioId.setValue(value);
    }
    
    public Integer getNumeroIteracao() {
        return aNumeroIteracao.getValue();
    }
    
    public void setNumeroIteracao(Integer value) {
        this.aNumeroIteracao.setValue(value);
    }
    
    public String getValorLido() {
        return aValorLido.getValue();
    }
    
    public void setValorLido(String value) {
        this.aValorLido.setValue(value);
    }
    
    public Long getPontoPlanoExecucaoId() {
        return aPontoPlanoExecucaoId.getValue();
    }
    
    public void setPontoPlanoExecucaoId(Long value) {
        this.aPontoPlanoExecucaoId.setValue(value);
    }
    
    public Long getProcessoAplicativoId() {
        return aProcessoAplicativoId.getValue();
    }
    
    public void setProcessoAplicativoId(Long value) {
        this.aProcessoAplicativoId.setValue(value);
    }
    
    public java.sql.Timestamp getDataHoraAjuste() {
        return aDataHoraAjuste.getValue();
    }
    
    public void setDataHoraAjuste(java.sql.Timestamp value) {
        this.aDataHoraAjuste.setValue(value);
    }
    
    public Long getResponsavelAjusteId() {
        return aResponsavelAjusteId.getValue();
    }
    
    public void setResponsavelAjusteId(Long value) {
        this.aResponsavelAjusteId.setValue(value);
    }
    
    public String getValorAjustado() {
        return aValorAjustado.getValue();
    }
    
    public void setValorAjustado(String value) {
        this.aValorAjustado.setValue(value);
    }
    
    public String getVaplNome() {
        return aVaplNome.getValue();
    }
    
    public void setVaplNome(String value) {
        this.aVaplNome.setValue(value);
    }
    
    public Long getVaplAplicativoOperacaoId() {
        return aVaplAplicativoOperacaoId.getValue();
    }
    
    public void setVaplAplicativoOperacaoId(Long value) {
        this.aVaplAplicativoOperacaoId.setValue(value);
    }
    
    public Long getParameterIdEnsaioBancada() {
        return pIdEnsaioBancada.getValue();
    }
    
    public void setParameterIdEnsaioBancada(Long value) {
        pIdEnsaioBancada.setValue(value);
        aEnsaioBancadaId.setValue(value);
    }
    // </editor-fold>
    
    
    @Override
    public String getJsServiceFile() {
        return "ui/ztest/cad_valor_variavel_ensaio.js";
    }
}
